package org.posupe.util;

public class Endereco {
	private String cep;

	private String logradouro;

	private Integer numero;

	private String complemento;

	private String bairro;

	private String cidade;

	private String estado;

	private String pais;

	public Endereco(String cep, String logradouro, Integer numero,
			String complemento, String bairro, String cidade, String estado,
			String pais) {
		this.cep = cep;
		this.logradouro = logradouro;
		this.numero = numero;
		this.complemento = complemento;
		this.bairro = bairro;
		this.cidade = cidade;
		this.estado = estado;
		this.pais = pais;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public Integer getNumero() {
		return numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	public String getPais() {
		return pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	public String toString() {
		if (!(this.complemento.trim().equals("")))
			return "Rua: " + this.logradouro + ", Num: " + this.numero + ", "
					+ this.complemento + "\nbairro: " + this.bairro
					+ ", cidade: " + this.cidade + ", estado: " + this.estado;
		else
			return "Rua: " + this.logradouro + ", Num: " + this.numero
					+ "\nbairro: " + this.bairro + ", cidade: " + this.cidade
					+ ", estado: " + this.estado;
	}

	public boolean match(Endereco endereco) {
		boolean retorno = true;

		if (endereco != null
				&& (endereco.getCep() != null
						|| endereco.getLogradouro() != null
						|| endereco.getNumero() != null
						|| endereco.getComplemento() != null
						|| endereco.getBairro() != null
						|| endereco.getCidade() != null
						|| endereco.getEstado() != null || endereco.getPais() != null)
				&& (this.getCep() != null || this.getLogradouro() != null
						|| this.getNumero() != null
						|| this.getComplemento() != null
						|| this.getBairro() != null || this.getCidade() != null
						|| this.getEstado() != null || this.getPais() != null)) {

			if (endereco.getCep() != null && this.getCep() != null && retorno) {
				if (!endereco.getCep().equals(this.getCep())) {
					retorno = false;
				}
			}
			if (endereco.getLogradouro() != null
					&& this.getLogradouro() != null && retorno) {
				if (!endereco.getLogradouro().contains(this.getLogradouro())) {
					retorno = false;
				}
			}

			if (endereco.getNumero() != null && this.getNumero() != null
					&& retorno) {
				if (this.getNumero() == null
						|| endereco.getNumero().intValue() != this.getNumero()
								.intValue()) {
					retorno = false;
				}
			}

			if (endereco.getComplemento() != null
					&& this.getComplemento() != null && retorno) {
				if (!endereco.getComplemento().contains(this.getComplemento())) {
					retorno = false;
				}
			}

			if (endereco.getBairro() != null && this.getBairro() != null
					&& retorno) {
				if (!endereco.getBairro().contains(this.getBairro())) {
					retorno = false;
				}
			}
			if (endereco.getCidade() != null && this.getCidade() != null
					&& retorno) {
				if (!endereco.getCidade().contains(this.getCidade())) {
					retorno = false;
				}
			}
			if (endereco.getEstado() != null && this.getEstado() != null
					&& retorno) {
				if (!endereco.getEstado().contains(this.getEstado())) {
					retorno = false;
				}
			}
			if (endereco.getPais() != null && this.getPais() != null && retorno) {
				if (!endereco.getPais().contains(this.getPais())) {
					retorno = false;
				}
			}
		} else {
			retorno = false;
		}

		return retorno;
	}
}
